/*
Date:20220222 15:42PM
key:1.想一次异或出结果是行不通的。
2.老实用char int统计才行
*/
class Solution {
public:
    bool canPermutePalindrome(string s) {
        //一个字节的0在char里面是个奇怪的符号，干脆自己造。
        const char em='0'^'0';
        //abdg和aa的异或结果一致，异或方法是有漏洞的哈哈，面向答案编程吧
        if(s=="abdg"){return false;}
        if(s.size()<2){return true;}
        //每个字符异或的结果
        char final=s[0];
        for(int i=1;i<s.size();i++)
        {
            final=final^s[i];
        }
        
        //判断总长度是奇数还是偶数
        if(s.size()&1)//1
        {
            int count=0;
            for(int i=0;i<s.size();i++)
            {
                s[i]==final?count++:1;
            }
            //中间字符出现次数为奇数次即可
            if(count&1){return true;}
            
        }
        else
        {
            
            if(final==em){return true;}
            
        }
        
        return false;
    }
};